<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"
    />
    <title>设计原则与编程技巧</title>
</head>

<body>
    <strong>开放封闭原则</strong>
    <p>每当我们增加一种新的 动物时，都需要改动 makeSound 函数的内部实现：</p>
    <p> // 动物世界里增加一只狗之后， makeSound 函数必须改成：：makeSound2</p>


    <script type="text/javascript">
        var makeSound = function (animal) {
            if (animal instanceof Duck) {
                console.log('嘎嘎嘎');
            } else if (animal instanceof Chicken) {
                console.log('咯咯咯');
            }
        };
        var Duck = function () { };
        var Chicken = function () { };
        makeSound(new Duck()); // 输出：嘎嘎嘎
        makeSound(new Chicken()); // 输出：咯咯咯


        // 动物世界里增加一只狗之后， makeSound 函数必须改成：
        var makeSound2 = function (animal) {
            if (animal instanceof Duck) {
                console.log('嘎嘎嘎');
            } else if (animal instanceof Chicken) {
                console.log('咯咯咯');
            } else if (animal instanceof Dog) { // 增加跟狗叫声相关的代码
                console.log('汪汪汪');
            }
        };
        var Dog = function () { };
        makeSound2(new Dog()); // 增加一只狗
    </script>

</body>

</html>